1 package uba.db;
2
3 import uba.db.column.CharColumnSpecification;
4 import uba.db.column.ColumnConstraint;
5 import uba.db.column.IntegerColumnSpecification;
6 import uba.db.table.TableSchema;
7 import uba.db.table.TableSchemaBuilder;
8
9 /***
10 * Esta clase brinda constantes con los esquemas que deben tener las tablas del
11 * sistema.
12 *
13 * @version $Revision: 1.3 $
14 */
15 public final class SystemTableSchemas {
16 /***
17 * Tamaņo maximo de los "nombres" (nombre de tabla, nombre de columna, etc).
18 */
19 private static final int MAX_NAME_CHARS = 64;
20
21 /***
22 * Retorna el esquema que debe tener la tabla de sistema <b>sys_tables</b>.<br>
23 * El cual esta definido como:
24 * <ul>
25 * <li><b>tableId</b> (PK): identificador de la tabla</li>
26 * <li><b>name</b> ({@link #MAX_NAME_CHARS}, UNIQUE): nombre de la tabla</li>
27 * <li>
28 */
29 public static final TableSchema TABLES_SCHEMA = createTablesSchema();
30
31 /***
32 * Retorna el esquema que debe tener la tabla de sistema <b>sys_columns</b>.<br>
33 * El cual esta definido como:
34 * <ul>
35 * <li><b>tableId</b> (PK): identificador de la tabla al que pertenece la
36 * columna</li>
37 * <li><b>columnId</b> (PK): identificador de la tabla al que pertenece la
38 * columna</li>
39 * <li><b>name</b> ({@link #MAX_NAME_CHARS}): nombre de la
40 * columna</li>
41 * <li><b>dataTypeId</b> (NOT NULL): identificador con el tipo de la
42 * columna, ver {@link #DATATYPES_SCHEMA}</li>
43 * <li>
44 */
45 public static final TableSchema COLUMNS_SCHEMA = createColumnsSchema();
46
47 /***
48 * Retorna el esquema que debe tener la tabla de sistema <b>sys_datatypes</b>.<br>
49 * El cual esta definido como:
50 * <ul>
51 * <li><b>dataTypeId</b> (PK): identificador para este tipo de datos</li>
52 * <li><b>name</b> (10, NOT NULL): nombre descriptivo para este tipo de
53 * datos</li>
54 * <li>
55 */
56 public static final TableSchema DATATYPES_SCHEMA = createDataTypesSchema();
57
58 private SystemTableSchemas() {}
59
60 private static TableSchema createDataTypesSchema() {
61 TableSchemaBuilder builder = new TableSchemaBuilder("sys_datatypes");
62 builder.addColumn(new IntegerColumnSpecification("dataTypeId",
63 ColumnConstraint.NOT_NULL));
64 builder.addColumn(new CharColumnSpecification("name", MAX_NAME_CHARS,
65 ColumnConstraint.NOT_NULL));
66 builder.addPrimaryKeyConstraintTo("dataTypeId");
67 builder.addUniqueConstraintTo("name");
68
69 return builder.build();
70 }
71
72 private static TableSchema createColumnsSchema() {
73 TableSchemaBuilder builder = new TableSchemaBuilder("sys_columns");
74 builder.addColumn(new IntegerColumnSpecification("tableId",
75 ColumnConstraint.NOT_NULL));
76 builder.addColumn(new IntegerColumnSpecification("columnId",
77 ColumnConstraint.NOT_NULL));
78 builder.addColumn(new CharColumnSpecification("name", MAX_NAME_CHARS,
79 ColumnConstraint.NOT_NULL));
80 builder.addColumn(new IntegerColumnSpecification("dataTypeId",
81 ColumnConstraint.NOT_NULL));
82 builder.addPrimaryKeyConstraintTo("tableId");
83 builder.addPrimaryKeyConstraintTo("columnId");
84
85 return builder.build();
86 }
87
88 private static TableSchema createTablesSchema() {
89 TableSchemaBuilder builder = new TableSchemaBuilder("sys_tables");
90 builder.addColumn(new IntegerColumnSpecification("tableId",
91 ColumnConstraint.NOT_NULL));
92 builder.addColumn(new CharColumnSpecification("name", MAX_NAME_CHARS,
93 ColumnConstraint.NOT_NULL));
94 builder.addPrimaryKeyConstraintTo("tableId");
95 builder.addUniqueConstraintTo("name");
96
97 return builder.build();
98 }
99 }